So instead, PCIe uses a source-synchronous model:


Embed the Clock in the Data

PCIe transmits data using 8b/10b encoding (for Gen1/Gen2 — later generations use other schemes).

These transitions let the receiver figure out the timing of the incoming bits.


Clock Recovery: How the Receiver Gets the Timing

Inside the receiver is a PLL (Phase-Locked Loop):

  1. The PLL looks at the incoming bit stream.
  2. It generates its own local clock and compares its phase to the data transitions.
  3. It speeds up or slows down its clock until its edges line up with the transitions in the data.
  4. Once synchronized, we say the PLL is locked — now it can correctly “sample” the incoming bits.

This process happens continuously — so if the transmitter clock drifts slightly due to temperature or voltage changes, the PLL tracks it.


Why 8b/10b Encoding is Important

If there were too many consecutive 1s or 0s (no transitions), the PLL would lose synchronization and start drifting.

8b/10b prevents this by guaranteeing at least one transition every 5 bits, so the PLL always has something to “lock” onto.


Why the Recovered Clock Isn’t Used for Everything

Students often ask:

“Why not use the recovered clock to run the entire receiver logic?”

Answer:

So, the recovered clock is used only for sampling incoming data, not for driving the whole chip.